﻿#ifndef ONEGIS_PSDE_DATASOURCE_IC_DBDATASOURCE_H
#define ONEGIS_PSDE_DATASOURCE_IC_DBDATASOURCE_H

#include <string>
#include <memory>
#include "libengine.h"
#include "IC_OTypeClass.h"
#include "IC_SObjectClass.h"
#include "IC_FileOpClass.h"
#include "IC_DObjectClass.h"
#include "IC_DynamicDataClass.h"
#include "IC_ModelOpClass.h"
#include "IC_SDomainClass.h"
#include "IC_TrackClass.h"
#include "IC_CatalogClass.h"

namespace onegis {
namespace psde {
namespace datasource {

class LIBENGINE_API IC_DBDataSource
{
public:

    virtual ~IC_DBDataSource() {}

    /* 数据源所在服务器域名 */
    virtual std::string getServer() = 0;

    /* 数据源名称，全局唯一 */
    virtual std::string getDsName() = 0;

    /* 获取用户名称 */
    virtual std::string getUser() = 0;

    /* 设置用户名称 */
    virtual void setUser(const std::string &user) = 0;

    /* 获取用户密码 */
    virtual std::string getPwd() = 0;

    /* 获取用户id */
    virtual std::string getUID(std::string& errmsg) = 0;

    /* 设置用户密码 */
    virtual void setPwd(const std::string &pwd) = 0;

    /* 创建一个 OType 操作类对象 */
    virtual OTypeClassPtr createOTypeClass() = 0;

    /* 创建一个 SObject 操作类对象 */
    virtual SObjectClassPtr createSObjectClass() = 0;

    /* 创建一个文件操作类对象 */
    virtual FileOpClassPtr createFileOp() = 0;

    /* 创建一个 DObject 操作类对象 */
    virtual DObjectClassPtr createDbjectClass() = 0;

    /*创建一个动态数据操作类对象*/
    virtual DynamicDataClassPtr createDynamicDataClass() = 0;

    /*创建一个模型数据操作类对象*/
    virtual ModelOpClassPtr createModelClass() = 0;

    /*创建一个时空域操作类对象 */
    virtual SDomainClassPtr createSDomainClass() = 0;

    /*创建一个轨迹数据操作类*/
    virtual TrackClassPtr  createTrackClass() = 0;

    /*创建一个目录请求类*/
    virtual CatalogClassPtr createCatalogClass() = 0;

};

typedef std::tr1::shared_ptr<IC_DBDataSource> DBDataSourcePtr;

}
}
}

#endif